package csu.web.credit_bank.utils;
//
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;

import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;

@Component
public class AliOssUtil {

    // 通过 @Value 注解从 application.properties 文件中读取配置
    @Value("${aliyun.oss.endpoint}")
    private String endpoint;

    @Value("${aliyun.oss.access-key-id}")
    private String accessKeyId;

    @Value("${aliyun.oss.access-key-secret}")
    private String accessKeySecret;

    @Value("${aliyun.oss.bucket-name}")
    private String bucketName;

    /**
     * 上传文件到OSS并返回文件的公开访问URL
     *
     * @param inputStream 文件的输入流
     * @param originalFilename 原始文件名
     * @return 上传成功后文件的URL
     */
    public String upload(InputStream inputStream, String originalFilename) {
        // 创建OSS客户端实例
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

        // 构建上传到OSS的文件路径和名称 (objectName)
        // 使用日期目录 + UUID 防止文件名重复
        String folder = new SimpleDateFormat("yyyy/MM/dd/").format(new Date());
        String extension = originalFilename.substring(originalFilename.lastIndexOf("."));
        String objectName = folder + UUID.randomUUID() + extension;

        String url = "";

        try {
            // 上传文件
            ossClient.putObject(bucketName, objectName, inputStream);

            // 拼接并返回文件的公开访问URL
            // URL格式：https://<BucketName>.<Endpoint>/<ObjectName>
            url = "https://" + bucketName + "." + endpoint + "/" + objectName;

        } catch (Exception e) {
            e.printStackTrace();
            // 可以在这里处理异常，例如返回null或抛出自定义异常
        } finally {
            // 5. 关闭OSS客户端，释放资源
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
        return url;
    }

    /**
     * 根据文件的完整URL删除OSS上的文件
     *
     * @param fileUrl 要删除文件的完整URL
     */
    public void delete(String fileUrl) {
        // 检查URL是否为空
        if (!StringUtils.hasLength(fileUrl)) {
            System.out.println("URL为空，删除操作终止。");
            return;
        }

        // 创建OSS客户端实例
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

        // 从URL中解析出 objectName
        // URL格式：https://<BucketName>.<Endpoint>/<ObjectName>
        String prefix = "https://" + bucketName + "." + endpoint + "/";
        if (!fileUrl.startsWith(prefix)) {
            System.err.println("URL格式不正确，无法解析objectName: " + fileUrl);
            return;
        }
        String objectName = fileUrl.substring(prefix.length());

        try {
            // 执行删除
            System.out.println("准备从OSS删除文件，objectName: " + objectName);
            ossClient.deleteObject(bucketName, objectName);
            System.out.println("文件删除成功。");

        } catch (Exception e) {
            e.printStackTrace();
            // 可以在这里处理异常，例如记录日志
        } finally {
            // 关闭OSS客户端，释放资源
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}